{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###第三周作业\n",
    "在 Rental Listing Inquiries 数据上练习 xgboost 参数调优\n",
    "数据说明：\n",
    "Rental Listing Inquiries 数据集是 Kaggle 平台上的一个分类竞赛任务，需要根据\n",
    "公寓的特征来预测其受欢迎程度（用户感兴趣程度分为高、中、低三类）。其\n",
    "中房屋的特征 x 共有 14 维，响应值 y 为用户对该公寓的感兴趣程度。评价标准\n",
    "为 logloss。\n",
    "数据链接：https://www.kaggle.com/c/two-sigma-connect-rental-listing-inquiries\n",
    "为减轻大家对特征工程的入手难度，以及统一标准，数据请用课程网站提供的\n",
    "特征工程编码后的数据（RentListingInquries_FE_train.csv）或稀疏编码的形式\n",
    "（RentListingInquries_FE_train.bin）。xgboost 既可以单独调用，也可以在\n",
    "sklearn 框架下调用。大家可以随意选择。若采用 xgboost 单独调用使用方式，\n",
    "建议读取稀疏格式文件。\n",
    "关于特征工程的过程，可参看文件：FE_RentListingInqueries.ipynb\n",
    "作业要求：\n",
    "采用 xgboost 模型完成商品分类（需进行参数调优）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier # scikit-learn嵌入的\n",
    "import xgboost as xgb             #用xgboost，交叉验证做迭代次数\n",
    "\n",
    "import numpy  as np #线性代数等\n",
    "import pandas as pd #读取文件等\n",
    "import scipy  as sp #处理10^10级别的数等\n",
    "import seaborn           as sns       #画图      \n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from matplotlib import pyplot\n",
    "from sklearn.model_selection import GridSearchCV  #网格搜索加交叉验证\n",
    "from sklearn.model_selection import StratifiedKFold #缺省的交叉验证用\n",
    "\n",
    "from sklearn.metrics import log_loss #评价指标"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "#读取数据\n",
    "trainRental = pd.read_csv(\"RentListingInquries_FE_train.csv\")\n",
    "testRental  = pd.read_csv(\"RentListingInquries_FE_test.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "trainRental.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 49352 entries, 0 to 49351\n",
      "Columns: 228 entries, bathrooms to interest_level\n",
      "dtypes: float64(9), int64(219)\n",
      "memory usage: 85.8 MB\n"
     ]
    }
   ],
   "source": [
    "trainRental.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2950</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>950.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3758</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3300</td>\n",
       "      <td>1650.000000</td>\n",
       "      <td>1100.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>4900</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 227 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.0         1   2950      1475.000000     1475.000000        0.0   \n",
       "1        1.0         2   2850      1425.000000      950.000000       -1.0   \n",
       "2        1.0         1   3758      1879.000000     1879.000000        0.0   \n",
       "3        1.0         2   3300      1650.000000     1100.000000       -1.0   \n",
       "4        2.0         2   4900      1633.333333     1633.333333        0.0   \n",
       "\n",
       "   room_num  Year  Month  Day  ...   virtual  walk  walls  war  washer  water  \\\n",
       "0       2.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "1       3.0  2016      6   24  ...         0     0      0    1       0      0   \n",
       "2       2.0  2016      6    3  ...         0     0      0    0       0      0   \n",
       "3       3.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "4       4.0  2016      4   12  ...         0     0      0    1       0      0   \n",
       "\n",
       "   wheelchair  wifi  windows  work  \n",
       "0           0     0        0     0  \n",
       "1           0     0        0     0  \n",
       "2           0     0        0     0  \n",
       "3           1     0        0     0  \n",
       "4           0     0        0     0  \n",
       "\n",
       "[5 rows x 227 columns]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "testRental.head()#观察之后发现trainRental和testRental差异在于　一维　响应值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 74659 entries, 0 to 74658\n",
      "Columns: 227 entries, bathrooms to work\n",
      "dtypes: float64(9), int64(218)\n",
      "memory usage: 129.3 MB\n"
     ]
    }
   ],
   "source": [
    "testRental.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x192f7efc160>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x192f7e98630>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(trainRental.interest_level)#查看响应值分布，两两之间都相差不到10倍，还可以"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "#划分输入特征和响应\n",
    "X_train = trainRental.drop(\"interest_level\",axis = 1)\n",
    "y_train = trainRental[\"interest_level\"]\n",
    "#y_train.head()\n",
    "cols = X_train.columns\n",
    "#print(cols)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "#已经是特征编码后的数据\n",
    "#StratifiedKFold 分层采样交叉切分，确保训练集，测试集中各类别样本的比例与原始数据集中相同。\n",
    "RentalKFold = StratifiedKFold(n_splits = 4,shuffle = True,random_state = 3)\n",
    "#待观察模型是过拟合还是欠拟合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "#构造函数，下面用\n",
    "def modelfit(alg,X_train,y_train,cv_folds = None,early_stopping_rounds = 10):\n",
    "    xgb_param = alg.get_xgb_params()#将设置的参数拿出来\n",
    "    xgb_param[\"num_class\"] = 3 #是3分类问题，设置这个要在CV函数中用到\n",
    "    \n",
    "    xgbTrain = xgb.DMatrix(X_train,label = y_train)#因为要直接调用xgboost，所以要变成DMtrix形式的\n",
    "    #直接调用xgboost内嵌CV,对迭代次数或者说是树的数目快速交叉验证\n",
    "    cvResult = xgb.cv(xgb_param,xgbTrain,num_boost_round = alg.get_params()[\"n_estimators\"],folds = cv_folds,\n",
    "                     metrics = \"mlogloss\",early_stopping_rounds = early_stopping_rounds)\n",
    "    cvResult.to_csv(\"First_RentalNestimators.csv\",index_label = \"n_estimators\")\n",
    "    \n",
    "    n_estimators = cvResult.shape[0]#最佳参数迭代次数\n",
    "    \n",
    "    alg.set_params(n_estimators = n_estimators)#将找到的弱学习器数目设置进去\n",
    "    alg.fit(X_train,y_train,eval_metric = \"mlogloss\")#是多类分问题，是3类，三步曲第二步自定义函数内部三步曲第二步"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "xgbFirst = XGBClassifier(                               #三步曲第一步\n",
    "            learning_rate = 0.1,n_estimators = 1000,    #首次变更项\n",
    "            max_depth = 4,      min_child_weight = 1,   #同一考虑\n",
    "            gamma = 0,\n",
    "            subsample = 0.3, colsample_bytree = 0.8,colsample_bylevel = 0.7,#行列采样\n",
    "            objective = \"multi:softprob\",                                       #因为是多类分问题\n",
    "            seed = 3)\n",
    "modelfit(xgbFirst,X_train,y_train,cv_folds = RentalKFold) #三步曲第二步"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Dell\\Documents\\anaconda\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "range(0, 383)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x23201f40f98>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvResult = pd.DataFrame.from_csv(\"First_RentalNestimators.csv\")\n",
    "#画图\n",
    "train_means = cvResult[\"test-mlogloss-mean\"]\n",
    "train_stds = cvResult[\"test-mlogloss-std\"]\n",
    "\n",
    "test_means  = cvResult[\"test-mlogloss-mean\"]\n",
    "test_stds   = cvResult[\"test-mlogloss-std\"]\n",
    "\n",
    "x_axis      = range(0,cvResult.shape[0])\n",
    "print(x_axis)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,elinewidth = 0.1,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,elinewidth = 0.1,label='Train')\n",
    "pyplot.title(\"Data mining killer: XGBoost* The number of iterations:n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'mLog Loss' )\n",
    "pyplot.savefig( 'n_estimators.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Dell\\Documents\\anaconda\\lib\\site-packages\\ipykernel_launcher.py:3: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  This is separate from the ipykernel package so we can avoid doing imports until\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x19297369320>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#help(pyplot.errorbar)\n",
    "\n",
    "\n",
    "                                        #迭代次数为    383\n",
    "    \n",
    "    \n",
    "cvResult = pd.DataFrame.from_csv('First_RentalNestimators.csv')\n",
    "\n",
    "cvResult = cvResult.iloc[50:]#接下来再细看一下，线的厚度就是两倍标准差\n",
    "# plot\n",
    "test_means = cvResult['test-mlogloss-mean']\n",
    "test_stds = cvResult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvResult['train-mlogloss-mean']\n",
    "train_stds = cvResult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(50,cvResult.shape[0]+50)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=50)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"Data mining killer: XGBoost* The number of iterations:n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'ｍLog Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
